問題解説: アップルパイが完成しない!
問題文
電子通信網局 特殊物理装置課から構築中のトラブルを解決して欲しいと依頼が届いた。
社内IoTシステムの開発のためRaspberryPiにRaspbianをインストールしたが、SSH接続ができず何もセットアップができない状態らしい。
尚、初めからSSHを用いてセットアップを行う予定だったためディスプレイやキーボードは用意されていないようが、なんとかしてセットアップを完了させてほしい。
スタート
RaspberryPiにRaspbianをインストールした直後の状態
ゴール
指定されたIPアドレスがRaspberryPiに振られており、SSHでアクセスできる。
情報
- 指定されたIPアドレス
192.168.0.88
- ネットワーク・アドレス
192.168.0.0/24
- デフォルトゲートウェイ
192.168.0.254
- DNSサーバー
8.8.8.8
- ユーザー
pi
- パスワード
raspberry
- イメージ
2017-11-29-raspbian-stretch-lite
トラブルの概要
Raspbian は 2016/11/25 以降のイメージではデフォルトでsshが無効化されていて、有効化するためには何らかの方法を取る必要がある。
Raspbian では、IPアドレスを固定する際に編集するファイルが、 /etc/network/interfaces
から /etc/dhcpcd.conf
に変更された。
解説
Raspbian では以下のいずれかの方法によって ssh を有効化する必要がある。
/boot
パーティションにssh
という名前の空のファイルを設置してから電源を入れてブートを始める。- Raspbian の Linux ファイルシステムを手元のPCにマウントして、
/etc/rc.d
などに起動時にsshを有効化するスクリプトを作成する。 - UART などの何らかの方法でコンソールにアクセスして
raspi-config
からsshを有効化する、もしくは$ systemctl start ssh
($ systemctl enable ssh
) を実行してsshを有効化する。
また、IPアドレスを固定するために /etd/dhcpcd.conf
にIPアドレスの設定を追記する。
解答例
お疲れ様です。運営委員の源波です。「アップルパイが完成しない!」問題の作業報告を提出いたします。
まず、一度 Raspberry Pi の電源を抜いてから、Raspberry Pi に挿入されていたSDカードを手元のノートパソコンにマウントします。dfコマンドの結果、 /boot
パーティションは手元PCの /Volumes/boot
にマウントされていることがわかったので次のコマンドで空のsshというファイルを作成します。$ touch /Volumes/boot/ssh
lsコマンドで正常にファイルが作成されていることを確認してから、SDカードを手元からアンマウントし、Raspberry Pi に挿入し直してから電源ケーブルを再度差し込みます。
これで Raspberry Pi のsshが有効化されたので、次にDHCPによって割り振られているアドレスを特定します。Raspberry Pi と同じLANに属しているインターフェイスを対象として、arp-scanコマンドを実行します。 $ arp-scan --interface en0 -l
Raspberry Pi に割り振られているIPアドレスが 192.168.0.8
であることがわかったので、sshで接続します。 $ ssh pi@192.168.0.8
sshで接続できたら、IPアドレスを固定するために、/etc/dhcpcd.conf
に以下の設定を追記しました。
interface eth0
static ip_address=192.168.0.88/24
static routers=192.168.0.254
static domain_name_servers=8.8.8.8
networking を再起動して、変更を完了します。$ sudo systemctl restart networking
これでIPアドレスが固定されます。$ ssh pi@192.168.0.88
以上が作業報告になります。よろしくお願いします。
採点基準
採点の基準として、sshの有効化とIPアドレスの固定で、それぞれ50%を想定していましたが、どちらかしかできていないチームはなかった。IPアドレスの固定については、現在でも /etc/network/interfaces
の編集による設定でも変更が可能であるが、/etc/network/interfaces
の中には、/etc/dhcpcd.conf
を編集しろという旨の記述がコメントアウトされており、そちらのほうが妥当であると考え、/etc/network/interfaces
を編集していたチームには満点より10点低い点数をつけた。